﻿using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;

namespace TowerDefenseXNA
{
    class Torre : Objeto//Herança extends 
    {
        SoundEffect efeitoSonoro;

        private animacao andando_direita;
        private animacao andando_esquerda;
        private animacao parado_direita;
        private animacao parado_esquerda;

        animacao animacao_atual;
        
        public int jogador;

        static List<Torre> lista = new List<Torre>();

        public Torre(Texture2D imagem, GameWindow Window, SoundEffect efeitoSonoro)
            :base(imagem, Window)
        {
           posicao = new Vector2(50, 50);
           velocidade = new Vector2(5, 5);
           this.efeitoSonoro = efeitoSonoro;

            //editado por: Rafael de Sousa

           parado_direita = new animacao();
           parado_direita.qtd_quadros = 1;
           parado_direita.quadros_seg = 8;
           parado_direita.Y = 32;
           parado_direita.quadro_X = 32;
           parado_direita.quadro_Y = 32;

           parado_esquerda = new animacao();
           parado_esquerda.qtd_quadros = 1;
           parado_esquerda.quadros_seg = 8;
           parado_esquerda.Y = 0;
           parado_esquerda.quadro_X = 32;
           parado_esquerda.quadro_Y = 32;

           andando_direita = new animacao();
           andando_direita.qtd_quadros = 3;
           andando_direita.quadros_seg = 8;
           andando_direita.Y = 32;
           andando_direita.quadro_X = 32;
           andando_direita.quadro_Y = 32;

           andando_esquerda = new animacao();
           andando_esquerda.qtd_quadros = 3;
           andando_esquerda.quadros_seg = 8;
           andando_esquerda.Y = 0;
           andando_esquerda.quadro_X = 32;
           andando_esquerda.quadro_Y = 32;

            //TO DO fazer metodo Definir Animacoes
           animacao_atual = parado_direita;

          colisao = new Rectangle((int)posicao.X, (int)posicao.Y, animacao_atual.quadro_X, animacao_atual.quadro_Y);

        }

        public bool Bateu(Objeto outro)
        {
            if ( this.Colisao.Intersects(outro.Colisao) )
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        //sobrecarregamento ou overload
        public override void Update(GameTime gameTime)
        { }

        public void Update(GameTime gameTime, KeyboardState teclado_atual, KeyboardState teclado_anterior, MouseState mouse_atual, MouseState mouse_anterior)
       {

           colisao.X = (int)posicao.X;
            colisao.Y = (int)posicao.Y;
            colisao.Width = animacao_atual.quadro_X;
            colisao.Height = animacao_atual.quadro_Y;

           if (jogador != 2)
           {
               if (teclado_atual.IsKeyDown(Keys.Right))
               {
                   posicao.X += velocidade.X;
                   animacao_atual = andando_direita;
               }

               if (teclado_atual.IsKeyDown(Keys.Left))
               {
                   posicao.X -= velocidade.X;
                   animacao_atual = andando_esquerda;
               }

               if (teclado_atual.IsKeyDown(Keys.Down))
               {
                   posicao.Y += velocidade.Y;
                   animacao_atual = andando_direita;
               }

               if (teclado_atual.IsKeyDown(Keys.Up))
               {
                   posicao.Y -= velocidade.Y;
                   animacao_atual = andando_direita;
               }

               if((teclado_atual.IsKeyUp(Keys.Right)) && (teclado_atual.IsKeyUp(Keys.Left)) && (teclado_atual.IsKeyUp(Keys.Down)) && (teclado_atual.IsKeyUp(Keys.Up)))
               {
                   if ((teclado_anterior.IsKeyDown(Keys.Right)) || (teclado_anterior.IsKeyDown(Keys.Down)) || (teclado_anterior.IsKeyDown(Keys.Up)))
                   {
                       animacao_atual = parado_direita;
                   }
                   else if (teclado_anterior.IsKeyDown(Keys.Left))
                   {
                       animacao_atual = parado_esquerda;
                   }
               }


               //fazer enum e setar animacao aqui com default
           }

           if (posicao.X >= window.ClientBounds.Width - colisao.Width)
               posicao.X = window.ClientBounds.Width - colisao.Width;

           if (posicao.Y >= window.ClientBounds.Height - colisao.Height)
               posicao.Y = window.ClientBounds.Height - colisao.Height;

           if (posicao.X <= 0)
               posicao.X = 0;

           if (posicao.Y <= 0)
               posicao.Y = 0;

           if ((mouse_atual.LeftButton == ButtonState.Pressed))
           {
               posicao = new Vector2(mouse_atual.X, mouse_atual.Y);
               if (mouse_anterior.LeftButton != ButtonState.Pressed)
               {
                   efeitoSonoro.Play();
               }
           }
       }

        public void Draw(GameTime gameTime, SpriteBatch spriteBatch)
        {
            base.Draw(gameTime, spriteBatch, animacao_atual);
        }
       
    }
}
